/*
    SUSAN® - Sole of Unix Save ANything

   Copyright (C) 2018-2020 Hechzh Property

   
*/

#ifndef BAREOS_LIB_TLS_CONF_H_
#define BAREOS_LIB_TLS_CONF_H_

#include "lib/tls_psk_credentials.h"
#include "lib/tls_conf_cert.h"
#include "lib/bareos_resource.h"
#include "lib/s_password.h"

enum TlsPolicy : uint32_t
{
  kBnetTlsNone = 0,    /*!< No TLS configured */
  kBnetTlsEnabled = 1, /*!< TLS with certificates is allowed but not required */
  kBnetTlsRequired = 2,  /*!< TLS with certificates is required */
  kBnetTlsAuto = 4,      /*!< TLS mode will be negotiated by ssl handshake */
  kBnetTlsDeny = 0xFF,   /*!< TLS connection not allowed */
  kBnetTlsUnknown = 0xFE /*!< initializer constant */
};

class TlsResource {
 public:
  s_password password_;    /* UA server password */
  TlsConfigCert tls_cert_; /* TLS structure */
  std::string cipherlist_; /* TLS Cipher List */
  std::string protocol_;
  bool authenticate_{false}; /* Authenticate only with TLS */
  bool tls_enable_{false};
  bool tls_require_{false};

  bool IsTlsConfigured() const;
  TlsPolicy GetPolicy() const;
  int SelectTlsPolicy(TlsPolicy remote_policy) const;
};

#endif  // BAREOS_LIB_TLS_CONF_H_
